﻿Option Explicit On
Option Strict On

Imports System.Data.OleDb

''' <summary>
''' Cosas que hacer 
''' </summary>
''' <remarks></remarks>

Public Class BBDDCita

    Private myBasedato As BBDD
    Private _cita As Cita

    Public Sub New()
        myBasedato = New BBDD()
        _cita = New Cita

    End Sub


#Region "Metodos Cita"

#Region "select"

    'se supone que tendría que ir en la clase clientes
    ''' <summary>
    ''' crea una lista de cliente por la busqueda
    ''' </summary>
    ''' <param name="nombreBuscar">el parametro ha buscar</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Function BusquedaClientes(ByVal nombreBuscar As String) As List(Of Cliente)
        Dim listaClientes As List(Of Cliente)
        listaClientes = New List(Of Cliente)

        Try
            'se comprueba si falla
            myBasedato.EjecutarComandoSelect("SELECT * FROM clientes WHERE nombre like '%" & nombreBuscar & "%' OR primerApellido like '%" & nombreBuscar & "%' OR segundoApellido like '%" & nombreBuscar & "%'")

            With myBasedato

                While .lector.Read
                    Dim auxCliente As New Cliente
                    auxCliente.CodCliente = CInt(.lector("idCliente")) 'no se comprueba con try cath pq es auto numerico
                    'uso por si esta vacio
                    Try
                        auxCliente.Nombre = CStr(.lector("nombre"))
                    Catch

                    End Try

                    Try
                        auxCliente.Telefono = CInt(.lector("telefono"))
                    Catch

                    End Try
                    'uso por si no es un número
                    Try
                        auxCliente.CP = CInt(.lector("codPostal"))
                    Catch

                    End Try

                    'uso por si esta vacio
                    Try
                        auxCliente.Apellido = CStr(.lector("primerApellido"))
                    Catch

                    End Try
                    Try
                        auxCliente.Apellido = auxCliente.Apellido & " " & CStr(.lector("segundoApellido"))
                    Catch

                    End Try
                    Try
                        auxCliente.FechaNac = CDate(.lector("fechaNacimiento"))
                    Catch

                    End Try

                    Try
                        auxCliente.email = CStr(.lector("email"))
                    Catch

                    End Try
                    listaClientes.Add(auxCliente)
                End While

            End With

        Catch

        End Try

        Return listaClientes
    End Function

    'esto se supone que va en Empleados
    ''' <summary>
    ''' consigue una lista de empleados a partir de la base de datos
    ''' </summary>
    ''' <returns>retorna una lista objetos empleados</returns>
    ''' <remarks></remarks>
    Public Function ObtenerTodosEmpleados() As List(Of Empleado)

        Dim listaEmpleado As New List(Of Empleado)

        Try
            'le pasamos la cadena a consultar
            'nos conectamos
            myBasedato.EjecutarComandoSelect("Select * From empleados;")

            'cargar datos
            With myBasedato
                While .lector.Read()

                    Dim nuevoEmple As New Empleado
                    nuevoEmple.IdEmpleado = CInt(.lector("idEmpleado"))
                    nuevoEmple.Dni = CStr(.lector("dniEmpleado"))
                    nuevoEmple.Nombre = CStr(.lector("nombreEmpleado"))
                    nuevoEmple.Apellido = CStr(.lector("primerApellidoEmpleado"))
                    nuevoEmple.SegundoApellido = CStr(.lector("segundoApellidoEmpleado"))
                    nuevoEmple.Telefono = CStr(.lector("telefono"))
                    listaEmpleado.Add(nuevoEmple)

                End While
                myBasedato.Desconectar()
            End With


        Catch ex As Exception

            MsgBox("Error: " & ex.Message)
            myBasedato.Desconectar()
        End Try

        Return listaEmpleado

    End Function

    'esto se supone que va en tratamientos
    ''' <summary>
    ''' consigue una lista de empleados a partir de la base de datos
    ''' </summary>
    ''' <returns>retorna una lista objetos empleados</returns>
    ''' <remarks></remarks>
    Public Function ObtenerTodosTrataminetos() As List(Of Tratamiento)

        Dim listaEmpleado As New List(Of Tratamiento)

        Try
            'nos conectamos y le pasamos la select

            myBasedato.EjecutarComandoSelect("Select * From tratamientos;")

            'cargar datos
            With myBasedato
                While .lector.Read()

                    Dim nuevoTratamiento As New Tratamiento
                    nuevoTratamiento.IdTratamiento = CStr(.lector("idTratamiento"))
                    nuevoTratamiento.nombre = CStr(.lector("nombre"))
                    nuevoTratamiento.Precio = CInt(.lector("precio"))
                    nuevoTratamiento.Tiempos = CInt(.lector("tiempoEstimado"))
                    Try
                        nuevoTratamiento.Descripcion = CStr(.lector("descripcion"))
                    Catch

                    End Try

                    listaEmpleado.Add(nuevoTratamiento)

                End While
                .Desconectar()
            End With
        Catch ex As Exception

            MsgBox("Error: " & ex.Message)
            myBasedato.Desconectar()
        End Try

        Return listaEmpleado

    End Function

    'esto se supone que va en citas
    ''' <summary>
    ''' retorna las citas que hay en esa fecha
    ''' </summary>
    ''' <param name="fecha">fecha que se pasa con el siguiente formato (dd/MM/yyyy)</param>
    ''' <returns>Una lista de citas</returns>
    ''' <remarks></remarks>
    Public Function BuscarCitaFecha(ByVal fecha As String) As List(Of Cita)
        Dim auxListaCita As New List(Of Cita)

        Try
            'myBasedato.EjecutarComandoSelect("SELECT * FROM Citas;")
            myBasedato.EjecutarComandoSelect("SELECT * FROM Citas, tratamientos WHERE  Citas.idTratamiento = tratamientos.idTratamiento AND fecha like #" & fecha & "#;")
            While myBasedato.lector.Read
                Dim auxCita As New Cita
                auxCita.idCita = CStr(myBasedato.lector("idCita"))
                auxCita.horaInicio = CDate(myBasedato.lector("horaEntrada"))
                auxCita.fecha = CDate(myBasedato.lector("fecha"))

                auxCita.Empleado.IdEmpleado = CInt(myBasedato.lector("idEmpleado"))
                auxCita.Cliente.CodCliente = CInt(myBasedato.lector("idCliente"))
                Dim auxTratamiento As New Tratamiento
                auxTratamiento.IdTratamiento = CStr(myBasedato.lector("tratamientos.idTratamiento"))
                auxTratamiento.Tiempos = CInt(myBasedato.lector("tiempoEstimado"))
                auxCita.ListaTratamiento.Add(auxTratamiento)
                auxListaCita.Add(auxCita)

            End While
            myBasedato.Desconectar()
        Catch ex As Exception
            MsgBox(ex.Message)
            myBasedato.Desconectar()
        End Try

        Return auxListaCita
    End Function

    ''' <summary>
    ''' Buscamo la cita apartir de su idCita
    ''' </summary>
    ''' <param name="idCita">la id de la cita</param>
    ''' <returns>retorna un objecto cita relleno</returns>
    ''' <remarks></remarks>
    Public Function BuscarCitaIdCita(ByVal idCita As String) As Cita
        Dim auxCita As New Cita

        Try
            myBasedato.EjecutarComandoSelect("SELECT * FROM Citas, Clientes ,tratamientos WHERE  Citas.idTratamiento = tratamientos.idTratamiento AND Citas.idCliente = Clientes.idCliente AND idCita=" & idCita & ";")
            While myBasedato.lector.Read

                auxCita.idCita = CStr(myBasedato.lector("idCita"))
                auxCita.horaInicio = CDate(myBasedato.lector("horaEntrada"))
                auxCita.fecha = CDate(myBasedato.lector("fecha"))

                auxCita.Empleado.IdEmpleado = CInt(myBasedato.lector("idEmpleado"))
                auxCita.Cliente.CodCliente = CInt(myBasedato.lector("Citas.idCliente"))
                auxCita.Cliente.Nombre = CStr(myBasedato.lector("Clientes.nombre"))
                auxCita.Cliente.Telefono = CInt(myBasedato.lector("telefono"))
                Dim auxTratamiento As New Tratamiento
                auxTratamiento.IdTratamiento = CStr(myBasedato.lector("Citas.idTratamiento"))
                auxTratamiento.Tiempos = CInt(myBasedato.lector("tiempoEstimado"))
                auxTratamiento.nombre = CStr(myBasedato.lector("tratamientos.nombre"))
                auxCita.ListaTratamiento.Add(auxTratamiento)

            End While

            myBasedato.Desconectar()
        Catch ex As Exception
            MsgBox(ex.Message)
            myBasedato.Desconectar()
        End Try

        Return auxCita
    End Function

#End Region


#Region "insertar"
    'se usa en la clase cita
    ''' <summary>
    ''' inserta en BD un cita
    ''' </summary>
    ''' <param name="idCliente">número entero largo</param>
    ''' <param name="horaEntrada">hora formato "20:30"</param>
    ''' <param name="fechaEntrada">fecha formato "27/01/2012"</param>
    ''' <param name="idEmpleado">número entero largo</param>
    ''' <param name="idTratamiento">número entero largo</param>
    ''' <returns>inserción correta = true </returns>
    ''' <remarks></remarks>
    Public Function InsertarCita(ByVal idCliente As String, ByVal horaEntrada As String, ByVal fechaEntrada As String, ByVal idEmpleado As String, ByVal idTratamiento As String) As Boolean

        Dim ok As Boolean = False
        Dim command As New OleDbCommand
        Dim sqlInsertar As String = "INSERT INTO Citas (idCliente,horaEntrada,fecha,idEmpleado,idTratamiento) VALUES ('" _
        & idCliente & "',#" & horaEntrada & "#,#" & fechaEntrada & "#,'" & idEmpleado & "','" & idTratamiento & "');"

        If myBasedato.EjecutarComandoInsert(sqlInsertar) Then
            ok = True
        End If

        Return ok
    End Function


    ''' <summary>
    ''' inserta en BD un Cliente
    ''' </summary>
    ''' <param name="nombre">texto tamaño 50</param>
    ''' <param name="primerApellido">texto tamaño 50</param>
    ''' <param name="segundoApellido">texto tamaño 50</param>
    ''' <param name="telefono">texto tamaño 9</param>
    ''' <param name="codPostal">texto tamaño 5</param>
    ''' <param name="fechaNacimiento">fecha formato(27/01/2012)</param>
    ''' <param name="email">texto tamaño 50</param>
    ''' <returns>inserción correta = true</returns>
    ''' <remarks></remarks>
    Public Function InsertarCliente(ByVal nombre As String, ByVal primerApellido As String, ByVal segundoApellido As String, ByVal telefono As String, ByVal codPostal As String, ByVal fechaNacimiento As String, ByVal email As String) As Boolean

        Dim ok As Boolean = True

        Dim sqlInsertar As String = "INSERT INTO clientes (nombre,primerApellido,segundoApellido,telefono,codPostal,fechaNacimiento,email) VALUES ('" _
        & nombre & "','" & primerApellido & "','" & segundoApellido & "','" & telefono & "','" & codPostal & "',#" & fechaNacimiento & "#,'" & email & "');"

        If Not myBasedato.EjecutarComandoInsert(sqlInsertar) Then
            ok = False
        End If

        Return ok
    End Function
#End Region



#End Region



End Class
